﻿using My.Admin.Enum;
using My.Core.DynamicProxy;

namespace My.Admin.Service.System
{
	public class UserManager: ISelfSingletonAutoInject
	{
		private readonly IHttpContextAccessor _httpContextAccessor;
		private long _tenantId;

		public long UserId
		{
			get => long.Parse(_httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.UserId)?.Value);
		}

		public long TenantId
		{
			get
			{
				var tId = _httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.TenantId)?.Value;
				return string.IsNullOrWhiteSpace(tId) ? _tenantId : long.Parse(tId);
			}
			set => _tenantId = value;
		}

		public string Account
		{
			get => _httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.Account)?.Value;
		}

		public string RealName
		{
			get => _httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.RealName)?.Value;
		}

		public bool SuperAdmin
		{
			get => _httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.Account)?.Value == "admin";
		}

		public long OrgId
		{
			get
			{
				var orgId = _httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.OrgId)?.Value;
				return string.IsNullOrWhiteSpace(orgId) ? 0 : long.Parse(orgId);
			}
		}

		public string OpenId
		{
			get => _httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.OpenId)?.Value;
		}

		public UserManager(IHttpContextAccessor httpContextAccessor)
		{
			_httpContextAccessor = httpContextAccessor;
		}
	}
}
